#ifndef  _W5500_H_
#define  _W5500_H_

#include <stdint.h>
#include"regs.h"
#define	MAX_SOCK_NUM		8	/**< Maxmium number of socket  */


void socket_buf_init(uint8_t * tx_size, uint8_t * rx_size,int fd); // setting tx/rx buf size
uint8_t getISR(uint8_t s,int fd);
void putISR(uint8_t s, uint8_t val,int fd);
uint16_t getIINCHIP_RxMAX(uint8_t s);
uint16_t getIINCHIP_TxMAX(uint8_t s);
void setMR(uint8_t val,int fd);
void setRTR(uint16_t timeout,int fd); // set retry duration for data transmission, connection, closing ...
void setRCR(uint8_t retry,int fd); // set retry count (above the value, assert timeout interrupt)
void clearIR(uint8_t mask,int fd); // clear interrupt
uint8_t getIR( int fd );
void setSn_MSS(SOCKET s, uint16_t Sn_MSSR,int fd); // set maximum segment size
uint8_t getSn_IR(SOCKET s,int fd); // get socket interrupt status
uint8_t getSn_SR(SOCKET s,int fd); // get socket status
uint16_t getSn_TX_FSR(SOCKET s,int fd); // get socket TX free buf size
uint16_t getSn_RX_RSR(SOCKET s,int fd); // get socket RX recv buf size
void setSn_TTL(SOCKET s, uint8_t ttl,int fd);
void send_data_processing(SOCKET s, uint8_t *wizdata, uint16_t len,int fd);
void recv_data_processing(SOCKET s, uint8_t *wizdata, uint16_t len,int fd);

void setGAR(uint8_t * addr,int fd); // set gateway address
void setSUBR(uint8_t * addr,int fd); // set subnet mask address
void setSHAR(uint8_t * addr,int fd); // set local MAC address
void setSIPR(uint8_t * addr,int fd); // set local IP address
void getGAR(uint8_t * addr,int fd);
void getSUBR(uint8_t * addr,int fd);
void getSHAR(uint8_t * addr,int fd);
void getSIPR(uint8_t * addr,int fd);

void setSn_IR(uint8_t s, uint8_t val,int fd);
void iinchip_init(int fd);




extern uint8_t txsize[];
extern uint8_t rxsize[];
#endif